Java RMI (Remote Method Invocation) প্রযুক্তি ব্যবহার করে রিমোট অ্যাপ্লিকেশন ডেভেলপমেন্ট সহজ হলেও, এটি সঠিকভাবে সুরক্ষিত না করলে নিরাপত্তা ঝুঁকির মুখোমুখি হতে পারে। নিচে RMI Application এর জন্য নিরাপত্তা নিশ্চিত করার কিছু Best Practices উল্লেখ করা হলো।
১. Java Security Manager ব্যবহার করুন
- Security Manager RMI অ্যাপ্লিকেশনে অনুমতিগুলো কনফিগার করে যা নির্ধারণ করে অ্যাপ্লিকেশন কোন রিসোর্স অ্যাক্সেস করতে পারবে।
- এটি ডিফল্টভাবে নিষ্ক্রিয় থাকে, তবে RMI অ্যাপ্লিকেশনের জন্য এটি সক্রিয় করা আবশ্যক।
উদাহরণ: Security Manager চালু করা
public class RMIServer {
public static void main(String[] args) {
System.setProperty("java.security.policy", "server.policy");
System.setSecurityManager(new SecurityManager());
// RMI server setup code
}
}
server.policy উদাহরণ:
grant {
permission java.net.SocketPermission "*:1024-65535", "connect,accept";
permission java.io.FilePermission "/logs/*", "write";
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
};
২. SSL/TLS এর মাধ্যমে এনক্রিপশন নিশ্চিত করুন
- RMI কলের মধ্যে ডেটা এনক্রিপ্ট করতে SSL/TLS ব্যবহার করুন।
- এটি Man-in-the-Middle Attack থেকে রক্ষা করে।
SSL RMI Server Example:
System.setProperty("javax.net.ssl.keyStore", "server.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
System.setProperty("javax.net.ssl.trustStore", "server.truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "password");
RMISocketFactory.setSocketFactory(new SslRMIClientSocketFactory());
Naming.rebind("rmi://localhost:1099/SecureService", new MyService());
৩. RMI Registry এক্সপোজার সীমাবদ্ধ করুন
- RMI Registry কে সরাসরি এক্সপোজ না করে ফায়ারওয়াল বা অ্যাকসেস কন্ট্রোল তালিকা (ACL) ব্যবহার করুন।
- শুধুমাত্র নির্দিষ্ট ক্লায়েন্টদের অনুমতি দিন।
Registry Initialization with ACL:
LocateRegistry.createRegistry(1099, new SslRMIClientSocketFactory(), new SslRMIServerSocketFactory());
৪. Dynamic Code Downloading নিষ্ক্রিয় করুন
- RMI ডিফল্টভাবে ডাইনামিক কোড লোডিং সক্ষম রাখে, যা নিরাপত্তা ঝুঁকি তৈরি করতে পারে। এটি নিষ্ক্রিয় করুন।
Dynamic Code Loading Off:
System.setProperty("java.rmi.server.useCodebaseOnly", "true");
৫. Strong Authentication এবং Authorization বাস্তবায়ন করুন
- RMI-তে username-password বা token-based authentication ব্যবহার করুন।
- ক্লায়েন্টের রিকোয়েস্ট যাচাই করতে Java Authentication and Authorization Service (JAAS) ব্যবহার করুন।
JAAS উদাহরণ:
LoginContext lc = new LoginContext("MyLoginModule", new MyCallbackHandler());
lc.login();
৬. Sensitive Information Logging এড়িয়ে চলুন
- RMI লগ ফাইল বা কনসোলে সংবেদনশীল তথ্য প্রকাশ করবেন না।
- উদাহরণ: পাসওয়ার্ড, টোকেন, বা সার্ভার URL লগ না করা।
৭. ফায়ারওয়াল এবং পোর্ট ব্যবস্থাপনা
- RMI সার্ভারকে নির্দিষ্ট পোর্টে চলতে দিন এবং ফায়ারওয়াল দিয়ে অন্যান্য পোর্ট ব্লক করুন।
Custom RMI Server Port:
LocateRegistry.createRegistry(5000);
৮. ক্লাসলোডিং এবং সিরিয়ালাইজেশন সমস্যার সমাধান
- শুধুমাত্র বিশ্বস্ত অবজেক্ট এবং ক্লাস সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করুন।
- অবাঞ্ছিত ক্লাস লোডিং প্রতিরোধে
ObjectInputFilterব্যবহার করুন।
ObjectInputFilter Example:
ObjectInputFilter.Config.setSerialFilter(info -> {
if (info.serialClass() != null && info.serialClass().getName().startsWith("trusted.package")) {
return ObjectInputFilter.Status.ALLOWED;
}
return ObjectInputFilter.Status.REJECTED;
});
৯. ক্লায়েন্ট এবং সার্ভারের মধ্যে সেশন ম্যানেজমেন্ট
- প্রতিটি ক্লায়েন্টের জন্য আলাদা সেশন তৈরি করুন এবং সেশনের মেয়াদ সীমাবদ্ধ করুন।
- উদাহরণ: সার্ভারের সাথে ক্লায়েন্টের সংযোগ সময় ১০ মিনিটের বেশি নয়।
১০. Security Libraries ব্যবহার করুন
- Apache Shiro বা Spring Security এর মত ফ্রেমওয়ার্ক ব্যবহার করে নিরাপত্তা বৈশিষ্ট্য বাস্তবায়ন করুন।
১১. RMI Call Limiting
- DDoS (Distributed Denial of Service) আক্রমণ প্রতিরোধে সার্ভারে একক ক্লায়েন্টের রিকোয়েস্ট সীমিত করুন।
- উদাহরণ: একক ক্লায়েন্ট প্রতি সেকেন্ডে সর্বোচ্চ ১০টি রিকোয়েস্ট করতে পারবে।
১২. Monitoring এবং Logging
- রিমোট কলগুলো পর্যবেক্ষণ করুন এবং সন্দেহজনক কার্যকলাপ লগ করুন।
- লগ বিশ্লেষণের জন্য ELK Stack বা Prometheus ব্যবহার করুন।
Best Practices Checklist
| Practice | উপকারিতা |
|---|---|
| Java Security Manager | অ্যাক্সেস নিয়ন্ত্রণ নিশ্চিত করে। |
| SSL/TLS | ডেটা এনক্রিপশন এবং নিরাপদ যোগাযোগ। |
| Dynamic Code Loading Off | অননুমোদিত কোড লোডিং প্রতিরোধ। |
| JAAS বা Custom Authentication | ব্যবহারকারীর পরিচয় যাচাই। |
| Custom RMI Port | নির্ধারিত পোর্টে RMI কার্যক্রম সীমাবদ্ধ। |
| ObjectInputFilter | অবাঞ্ছিত ক্লাস লোডিং থেকে নিরাপত্তা। |
| Firewall এবং Port Restriction | সার্ভারকে নির্দিষ্ট নেটওয়ার্কের জন্য সীমাবদ্ধ করা। |
| Logging এবং Monitoring | সন্দেহজনক কার্যকলাপ সনাক্তকরণ। |
RMI অ্যাপ্লিকেশনের সুরক্ষা নিশ্চিত করতে Security Manager, SSL/TLS, এবং Authentication বাস্তবায়ন করা অত্যন্ত গুরুত্বপূর্ণ। সঠিক নিরাপত্তা ব্যবস্থা এবং Best Practices অনুসরণ করলে RMI সিস্টেমকে আরো সুরক্ষিত এবং নির্ভরযোগ্য করা সম্ভব।
Read more